package com.zhiche.lisa.lspm.dao.mapper.driver;

import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.zhiche.lisa.lspm.dao.model.carrier.bo.CarAndDriverInfoLineBO;
import com.zhiche.lisa.lspm.dao.model.driver.Driver;
import com.zhiche.lisa.lspm.dao.model.driver.DriverCheckin;
import com.zhiche.lisa.lspm.dao.model.driver.bo.DriverCarrierBO;
import com.zhiche.lisa.lspm.dao.model.driver.bo.DriverLineBO;
import com.zhiche.lisa.lspm.dto.DriverDTO;
import com.zhiche.lisa.lspm.dto.DriverExportDTO;
import com.zhiche.lisa.lspm.dto.DriverTypeDTO;
import com.zhiche.lisa.lspm.vo.driver.DriverLineVO;
import com.zhiche.lisa.lspm.vo.driver.DriverToErpVO;
import com.zhiche.lisa.lspm.vo.vehicle.CarAndDriverInfoLineVO;
import org.apache.ibatis.annotations.Param;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 司机 Mapper 接口
 * </p>
 *
 * @author qichao
 * @since 2018-05-23
 */
public interface DriverMapper extends BaseMapper<Driver> {

    /**
     * 司机列表
     *
     * @param page
     * @param ew
     * @return
     */
    List<DriverLineVO> driverLine(Page<DriverLineBO> page,
                                  @Param("ew") Wrapper<DriverLineBO> ew);

    /**
     * 认证的司机列表
     *
     * @param page
     * @param ew
     * @return
     */
    List<DriverLineVO> authedDriverLine(Page<DriverLineBO> page,
                                        @Param("ew") Wrapper<DriverLineBO> ew);

    /**
     * 车辆与司机关系列表
     *
     * @param page
     * @param ew
     * @return
     */
    List<CarAndDriverInfoLineVO> carAndDriverInfoLine(Page<CarAndDriverInfoLineBO> page,
                                                      @Param("ew") Wrapper<CarAndDriverInfoLineBO> ew);

    /**
     * 根据承运商 id 批量更新状态
     *
     * @param status
     * @param lspIdList
     */
    void batchUpdateStatusByLspId(@Param("authStatus") Integer authStatus, @Param("status") Integer status, @Param("lspIdList") List<Long> lspIdList);

    /**
     * 批量业务更新状态
     *
     * @param status
     * @param idList
     */
    void batchUpdateStatus(@Param("status") Integer status, @Param("idList") List<Long> idList);

    /**
     * 根据ID批量更新状态
     *
     * @param authStatus
     * @param status
     * @param driverIds
     */
    void batchUpdateAuthStatusByIds(@Param("authStatus") Integer authStatus, @Param("status") Integer status, @Param
            ("IdList") List<Long> driverIds);

    /**
     * 根据承运商 id 数组获取底下的所有司机 id
     *
     * @param lspIdList
     */
    List<Long> selectIdByLspIds(@Param("lspIdList") List<Long> lspIdList);

    /**
     * 更换司机所属承运商
     *
     * @param driver
     * @return
     */
    Integer updateDriverLspRelation(Driver driver);

    /**
     * 分页查询司机与牵引车
     *
     * @param page
     * @param ew
     * @return
     */
    List<DriverCarrierBO> selectPageDriverCarrier(Page<DriverCarrierBO> page,
                                                  @Param("ew") Wrapper<DriverCarrierBO> ew);

    /**
     * 获取库内所有司机信息
     *
     * @param ew
     * @return
     */
    List<Driver> selectDriverNoTenant(@Param("ew") Wrapper<Driver> ew);

    /**
     * 获取库内一条司机信息
     *
     * @param ew
     * @return
     */
    Driver getDriverNoTenant(@Param("ew") Wrapper<Driver> ew);

    /**
     * 恢复删除状态
     */
    void updateDeleteStatus(@Param("ew") Wrapper<Driver> ew);


    /**
     * 查询司机判定的车队
     */
    DriverToErpVO driverToErpVO(@Param("id") Long id);

    void updateDriverCheckInIU(@Param("ew") EntityWrapper<DriverCheckin> checkInEW);

    void updateDriverCheckInRC(HashMap<String, String> param);

    List<DriverExportDTO> selectExportDriverNoTenant(@Param("ew") EntityWrapper<DriverExportDTO> ew,@Param("params")Map<String,String> condition);

    DriverDTO queryDriverFleetNoTenant(@Param("ew") Wrapper<DriverDTO> drEW);

    Driver selectByIdNoTenant(@Param("id") Long id);

    DriverToErpVO driverToErpVONoTenant(@Param("id") Long id);

    void updateSQLMode();

    List<DriverTypeDTO> selectDriverTypeList(Page<DriverTypeDTO> page,@Param("ew") Wrapper<DriverTypeDTO> ew);

    List<Driver> selectByLspId(@Param("lspId")String lspId);

    Driver selectDriverByFleetBindId(@Param("fleetBindId")Long fleetBindId);
}
